/*
* 2020/02/22 By hkm
* 
* 
* 链表的初始化，增加节点，删除节点
* 
*/

#ifndef		__LINKLISH_H__
#define		__LINKLISH_H__

#include <pthread.h>


typedef struct linknode{
	void *data;	//数据
	int size;	//大小
	struct linknode *next;
}linknode_s;

typedef void (*record_fn)(void *data);

typedef struct linklist{
	int num;			// 当前数据个数
	int capacity;		//容量
	linknode_s *head;	// 链表头
	linknode_s *tail;	// 链表尾
	pthread_mutex_t mutex;	//线程锁
	record_fn record;	//记录用户信息
}linklist_s;


//链表初始化，
//参数：record 数据出队时，查看数据信息，若不需要查看则为NULL, cap链表的容量，超过该值则进入的数据覆盖以前的数据
//返回值：链表结构体指针
linklist_s * list_init(record_fn record, int cap);


//删除list
void list_del(linklist_s * list);

//清空list
void list_clear(linklist_s *list);

//入队
int list_add_node(linklist_s *list, void *data, int size);

//出队
int list_pop_node(linklist_s *list, void *data);

#endif